#include <stdio.h>      // 提供 printf 等标准输入输出函数
#include <signal.h>     // 提供 signal()、SIGINT 等信号处理相关功能
#include <unistd.h>     // 提供 sleep() 等系统调用
#include <stdlib.h>     // 提供 exit() 函数

// step 1# 声明一个自定义的信号处理函数，用于处理 SIGINT（如 Ctrl+C）
void sigint_handler(int signum);  // signum 为接收到的信号编号

int main(int argc, char const *argv[]) {
    // step 2# 注册 SIGINT（Ctrl+C）信号的处理函数
    // 如果注册成功，当收到 SIGINT 信号时会执行 sigint_handler，而不是终止程序
    if (signal(SIGINT, sigint_handler) == SIG_ERR) {  // signal() 注册信号处理函数
        perror("signal");  // 输出错误信息
        return 1;          // 返回错误状态码
    }

    // step 3# 主程序逻辑：循环等待信号到来
    while (1) {
        sleep(2);                      // 每次延迟 2 秒
        printf("快放学了吗？\n");     // 模拟一个定时提醒
    }

    return 0;
}

// step 4# 自定义的 SIGINT 信号处理函数
// 当用户按下 Ctrl+C，程序收到 SIGINT 信号时执行此函数
void sigint_handler(int signum) {
    printf("收到 %d 信号，放学闪人（停止程序）！\n", signum);  // 打印信号编号
    exit(signum);  // 以信号编号作为退出码终止程序
}
